<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>532. 数组中的 k-diff 数对</title>
  </head>
  <body>
    <script>
      //     532. 数组中的 k-diff 数对
      // 给定一个整数数组和一个整数 k，你需要在数组里找到 不同的 k-diff 数对，并返回不同的 k-diff 数对 的数目。

      // 这里将 k-diff 数对定义为一个整数对 (nums[i], nums[j])，并满足下述全部条件：

      // 0 <= i < j < nums.length
      // |nums[i] - nums[j]| == k
      // 注意，|val| 表示 val 的绝对值。

      // 示例 1：

      // 输入：nums = [3, 1, 4, 1, 5], k = 2
      // 输出：2
      // 解释：数组中有两个 2-diff 数对, (1, 3) 和 (3, 5)。
      // 尽管数组中有两个1，但我们只应返回不同的数对的数量。
      // 示例 2：

      // 输入：nums = [1, 2, 3, 4, 5], k = 1
      // 输出：4
      // 解释：数组中有四个 1-diff 数对, (1, 2), (2, 3), (3, 4) 和 (4, 5)。
      // 示例 3：

      // 输入：nums = [1, 3, 1, 5, 4], k = 0
      // 输出：1
      // 解释：数组中只有一个 0-diff 数对，(1, 1)。

      /**
       * @param {number[]} nums
       * @param {number} k
       * @return {number}
       */
      // var findPairs = function (nums, k) {
      //   debugger
      //   const map = new Map()
      //   if (k !== 0) {
      //     nums = Array.from(new Set(nums))
      //   }
      //   const len = nums.length
      //   let n = 0
      //   for (let i = 0; i < len - 1; i++) {
      //     for (let j = i + 1; j < len; j++) {
      //       if (Math.abs(nums[i] - nums[j]) === k) {
      //         if (!map.get(nums[i]) && !map.get(nums[j])) {
      //           map.set(nums[i], nums[j])
      //           map.set(nums[j], nums[i])
      //           if (nums[i] === nums[j]) {
      //             map.set(nums[j] + '1', nums[i] + '1')
      //           }
      //         } else if (map.get(nums[i]) !== nums[j] && map.get(nums[j]) !== nums[i]) {
      //           n++
      //         }
      //       }
      //     }
      //   }
      //   return map.size / 2 + n
      // }

      var findPairs = function (nums, k) {
        debugger
        const numSet = new Set(),
          ans = new Set()
        for (const num of nums) {
          if (numSet.has(num - k)) {
            ans.add(num)
          }
          if (numSet.has(num + k)) {
            ans.add(num + k)
          }
          numSet.add(num)
        }
        return ans.size
      }

      console.log(findPairs([-1, 0, 0, 1, 0, 0, -1], 1))

      // const a = new Map()
      // a.set(3, 0)
      // a.set('hhh', 'why')
      // console.log(a.get('why')) // map.get只能通过key值获取值
    </script>
  </body>
</html>
